package com.hunter.applearn.adapter

import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter

/**
 * 首页ViewPager2的适配器
 * 作用：管理TabLayout对应的多个Fragment页面
 *
 * 继承自FragmentStateAdapter，适合页面较多的情况，会节省内存
 * 当页面离开屏幕时，Fragment会被销毁，只保存状态
 */
class HomeViewPagerAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
    // 存储所有Fragment的列表（每个Tab对应一个Fragment）
    private val fragments = mutableListOf<Fragment>()

    // 存储所有Tab标题的列表（与fragments列表位置一一对应）
    private val titles = mutableListOf<String>()

    /**
     * 添加Fragment和对应的标题
     *
     * @param fragment 要显示的Fragment页面
     * @param title TabLayout中显示的标题文字
     *
     * 示例：
     * adapter.addFragment(FollowFragment(), "关注")
     * adapter.addFragment(RecommendFragment(), "推荐")
     */
    fun addFragment(fragment: Fragment, title: String) {
        fragments.add(fragment) // 将Fragment添加到列表
        titles.add(title)   // 将标题添加到列表
    }

    /**
     * 根据位置获取对应的Tab标题
     *
     * @param position Tab的位置（从0开始）
     * @return 对应位置的标题文字
     *
     * 示例：当position=0时，返回"关注"
     */
    fun getTitle(position: Int): String {
        return titles[position]
    }

    /**
     * 创建指定位置的Fragment（系统自动调用）
     *
     * @param position 要创建的Fragment位置
     * @return 对应位置的Fragment实例
     *
     * 当用户滑动到某个页面时，系统会自动调用此方法创建Fragment
     */
    override fun createFragment(position: Int): Fragment {
        return fragments[position]
    }

    /**
     * 获取总页面数量（Tab数量）
     *
     * @return Fragment/Tab的总数
     *
     * 系统用这个方法来知道有多少个页面需要显示
     */
    override fun getItemCount(): Int {
        return fragments.size
    }
}